<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 定义节点类
        class TreeNode {
            constructor(value) {
                this.value = value; // 节点值
                this.left = null;   // 左子节点
                this.right = null;  // 右子节点
            }
        }

        // 定义二叉树类
        class BinaryTree {
            constructor() {
                this.root = null; // 根节点
            }

            // 插入节点
            insert(value) {
                const newNode = new TreeNode(value);
                if (this.root === null) {
                    this.root = newNode; // 如果树为空，将新节点设为根节点
                } else {
                    this.insertNode(this.root, newNode); // 否则插入到合适的位置
                }
            }

            // 辅助方法，用于插入节点
            insertNode(node, newNode) {
                if (newNode.value < node.value) {
                    if (node.left === null) {
                        node.left = newNode; // 左子节点为空，插入新节点
                    } else {
                        this.insertNode(node.left, newNode); // 递归插入到左子树
                    }
                } else {
                    if (node.right === null) {
                        node.right = newNode; // 右子节点为空，插入新节点
                    } else {
                        this.insertNode(node.right, newNode); // 递归插入到右子树
                    }
                }
            }

            // 中序遍历
            inOrderTraversal(node) {
                if (node !== null) {
                    this.inOrderTraversal(node.left); // 先遍历左子树
                    console.log(node.value);          // 然后访问节点
                    this.inOrderTraversal(node.right); // 最后遍历右子树
                }
            }
        }

        // 使用示例
        const tree = new BinaryTree();
        tree.insert(10);
        tree.insert(5);
        tree.insert(15);
        tree.insert(3);
        tree.insert(7);

        // 中序遍历输出
        tree.inOrderTraversal(tree.root); // 输出: 3, 5, 7, 10, 15
    </script>
</body>

</html>